package com.linghu.controller;

import com.linghu.service.*;
import com.linghu.pojo.Person;
import dev.langchain4j.model.chat.response.ChatResponse;
import dev.langchain4j.service.TokenStream;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import jakarta.annotation.Resource;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;

import java.io.IOException;

/**
 * 聊天控制器
 * 提供与AI助手交互的RESTful API接口
 */
@RestController
public class Chat2Controller {
    @Resource
    private Assistant assistant;

    /**
     * 处理聊天请求
     * @param message 用户消息，默认值为"你欠的钱什么时候还？"
     * @return AI助手的回复
     */
//    @GetMapping("/chat")
//    public String model(@RequestParam(value = "message", defaultValue = "你欠的钱什么时候还？") String message) {
//        return assistant.chat(message);
//    }

    /**
     * 获取AI助手的自我介绍信息
     * @return 包含个人信息的Person对象
     */
//    @GetMapping("/intro")
//    public Person intro() {
//        return assistant.intro();
//    }
    /**
     * 处理聊天请求，返回SSE流
     * @param message 用户消息，默认值为"你好"
     * @return SseEmitter SSE事件发射器，用于流式传输响应
     */
//    @GetMapping(value = "/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE) // 指定返回SSE流
//    public SseEmitter model(@RequestParam(value = "message", defaultValue = "你好") String message) {
//        SseEmitter emitter = new SseEmitter(); // 创建SSE发射器
//        TokenStream chatStream = assistant.chat(message); // 获取AI助手的流式响应
//
//        // 设置部分响应处理
//        chatStream.onPartialResponse((String partialResponse) -> {
//                    try {
//                        emitter.send(SseEmitter.event().data(partialResponse)); // 发送部分响应
//                    } catch (IOException e) {
//                        emitter.completeWithError(e); // 出错时关闭连接
//                    }
//                })
//                .onCompleteResponse((ChatResponse response) -> emitter.complete()) // 完成时关闭连接
//                .onError((Throwable error) -> emitter.completeWithError(error)) // 出错处理
//                .start(); // 启动流
//
//        return emitter; // 返回SSE发射器
//    }
}
